package cn.tedu.demo7;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component
public class Person {
    private String name;

    public Person() {
        System.out.println("1.Person的构造方法被调用了");
    }

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }
    @Value("张三")
    public void setName(String name) {
        System.out.println("2.Person的setName方法调用了，初始化name属性");
        this.name = name;
    }
    /*
    当我们定义一个方法并使用注解@PostConstruct
    此时,如果Spring容器将一个对象完整初始化完毕后，就会调用该方法完整初始化完毕:
    对象实例化了,属性也初始化了。
    当前方法的名字可以任意，但是必须使用@PostConstruct注解才能有效果*/
    @PostConstruct
    public void postConstruct() {
        System.out.println("3.Person的postConstruct方法被调用了");
    }

    public void play(){
        System.out.println("4.正常的方法调用了");
        System.out.println(name+"出去玩了");
    }
    @PreDestroy
    public void preDestroy() {
        System.out.println("5.Person的preDestroy方法被调用了");
    }
}
